#ifndef BASE_I_H_
#define BASE_I_H_

#include <string>
#include <iostream>
#include <type_traits>
#include "WorkspaceTools.h"

namespace raph
{
class Object
    {
    private:
        /*-------------------------------------------------------------------
         attributs
         -------------------------------------------------------------------*/
        /*-------------------------------
         static
         -------------------------------*/
        static type::T_UINT32 NB_INSTANCES;
    public:
        /*-------------------------------------------------------------------
         constructor/destructor
         -------------------------------------------------------------------*/
        Object();
        Object(const Object&);
        virtual Object& operator =(const Object&);
        virtual ~Object();
        /*-------------------------------------------------------------------
         public methods
         -------------------------------------------------------------------*/
        virtual Object* cloneOf() const;
        virtual std::string toString();
        virtual bool equals(const Object&);
        /*-------------------------------
         static
         -------------------------------*/
        static type::T_UINT32 getNbInstances();
        /*-------------------------------
         friend methods
         -------------------------------*/
        friend std::ostream& operator <<(std::ostream& print, Object& obj);
    };
}

#endif /* BASE_I_H_ */
